
package javaapplication6;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JProgressBar;
import javax.swing.table.AbstractTableModel;

// Класс для работы с загрузками и их отображением
public class DownloadTableModel extends AbstractTableModel implements Observer {
      private static final long serialVersionUID = -7852567715605820609L;
    // Название столбцов таблицы загрузок
      private static final String[] columnNames = {"URL", "Размер (KB)",
    "Закачано", "Статус"};
    // Классы для каждого столбца
    @SuppressWarnings("rawtypes")
	private static final Class[] columnClasses = {String.class,
    	String.class, JProgressBar.class, String.class};

    // Функция добавления новой загрузки в таблицу
    public void addNewDownload(Dowloader download) {
        download.addObserver(this);
        fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1);
    }

// Функция удаления файла из таблицы
    public void clearDownload(int row) {
        fireTableRowsDeleted(row, row);
    }

    // Получение числа столбцов в таблице
    public int getColumnCount() {
        return columnNames.length;
    }

  // Получение имени столбца
    public String getColumnName(int col) {
        return columnNames[col];
    }

    // Получение класса столбца
    @SuppressWarnings({ "rawtypes", "unchecked" })
	public Class getColumnClass(int col) {
        return columnClasses[col];
    }

    // Получение кол-ва строк таблицы
    public int getRowCount() {
        return DownloadManager.getInstance().getDownloadList().size();
    }

    // Получение значения заданной ячейки
    public Object getValueAt(int row, int col) {
    	// Получение загрузки из списка
        Dowloader download = DownloadManager.getInstance().getDownloadList().get(row);

        switch (col) {
            case 0: // URL
                return download.getURL();
            case 1: // Size
                int size = download.getFileSize();
                return (size == -1) ? "" : (Integer.toString(size/1000));
            case 2: // Progress
                return new Float(download.getProgress());
            case 3: // Status
                return Dowloader.STATUSES[download.getState()];
        }
        return "";
    }

    // Функция обновления состояния
    public void update(Observable o, Object arg) {
        int index = DownloadManager.getInstance().getDownloadList().indexOf(o);
        fireTableRowsUpdated(index, index);
    }
}